import Mock from 'mockjs' // 引入mockjs
const Random = Mock.Random // Mock.Random 是一个工具类，用于生成各种随机数据

Mock.setup({//设置请求延时时间
    timeout: 1000
})

const user = {
    id1: Random.guid(),
    id2: '@guid()',  //两种方式都可以
    id3: Random.string(10),
    id4: '@id()',
    idcard: Random.string('number', 8, 18),
    name: Random.cname(),// 随机生成任意名称
    loginname: Random.name(), // 生成姓名
    avatar1: Random.image(Random.size, '#02adea', 'Hello'), // 生成一个线上的图片(不建议使用)
    avatar2: Random.dataImage('80x80', '中国'), //生成一个base64图片
    birth: Random.date('yyyy-MM-dd'), //参数指定日期格式，也可以不指定
    gender: Random.boolean,
    country: Random.county(),
    province: Random.province(),
    homepage: Random.url(), // 生成web地址
    intro: Random.cword(100, 160),

    info: Random.paragraph(2, 5), //生成2至5个句子的文本
    reason: Random.csentence(10, 32),
    createTime: Random.time('A HH:mm:ss'),

    'Color': Random.color(), // 生成一个颜色随机值
    'Natural': Random.natural(1, 10), // 生成1到100之间自然数
    'Integer': Random.integer(1, 100), // 生成1到100之间的整数
    'Float': Random.float(0, 100, 0, 5), // 生成0到100之间的浮点数,小数点后尾数为0到5位
    'Character': Random.character(), // 生成随机字符串,可加参数定义规则
    'String': Random.string(2, 10), // 生成2到10个字符之间的字符串
    'Range': Random.range(0, 10, 2), // 生成一个随机数组
}

//支持正则：\正则表达式\
///user/getUserById?id=456
Mock.mock(/\/user\/getUserById1/, "get", function (options: any) {
    console.info(options.url)
    //通过正则表达式，从字符串中提取需要的数据
    let id = /\/user\/getUserById1\/(\d+)/.exec(options.url)
    console.info(id[1])
    user.id1 = id[1] -0 //设置id1的值，减0是将字符串转换为数字
    //设置id1的值，减0是将字符串转换为数字

    return {//正则形式的url外面不需要用引号括起来
        msg: 'success',
        code: 200,
        data: user
    }
})

Mock.mock('/user/getUserById2?id=3', "get", {
    msg: 'success',
    code: 200,
    data: user
})


Mock.mock('/user/listUser', 'post', {
    // 'user| 12': user //生成12组数据
    'user|5-10': [user] //生成5-10组数据
})

Mock.mock('/user/increate', 'post', function (options: any) {
        console.info(options.body) //验证、查看前端传递过来的数据
        return {
            code: 200,
            // msg: '用户添加成功'
            // msg: '@cword(8)' //使用这种方式会直接输出原字符串@cword(8)，需要采用下面的形式
            msg: Mock.mock('@cword(8)') //模拟
        }
    }
)
//自定义mock函数
Random.extend({
    addrs: function () {
        let res = ['河南', '河北', '河东', '河西']
        return this.pick(res)
    }
})
let userList = []
for (let i = 0; i < 10; i++) {
    const o = {
        id: '@id()', //不能生成值
        title: "@ctitle",
        idCard: '@id()',
        addr: '@city(true)',
        addr2: Random.addrs(),
        name: {"string|1-8": "yx"}
    }
    userList.push(o)
}
Mock.mock('/user/list', 'post', (options: any) => {
    //获取前端传递过来的数据
    console.info(options.body)
    return Mock.mock(userList)
})